import YAML from 'yaml'
import fs from 'fs'
import { _path, pluginRoot } from './Path.js'

class Config {
    // #config为私有变量
    #config
    constructor() {
        this.#initConfig()
        setInterval(() => { this.#initConfig() }, 60000);
    }
    // 启动初始化时同步config
    #initConfig() {
        let initialConfig = {}
        try {
            // 检查默认配置文件
            const default_config_path = `${pluginRoot}/config/default_config/default_config.yaml`
            if (!fs.existsSync(default_config_path)) {
                logger.error('默认设置文件不存在，请检查或重新安装插件')
                return true
            }
            // 检查配置文件
            const config_path = `${pluginRoot}/config/config/config.yaml`
            if (!fs.existsSync(config_path)) {
                logger.error('设置文件不存在，将使用默认设置文件')
                fs.copyFileSync(default_config_path, config_path)
            }
            // 同步配置文件
            const config_default_yaml = YAML.parse(fs.readFileSync(`${pluginRoot}/config/default_config/default_config.yaml`, 'utf-8'))
            const config_yaml = YAML.parse(fs.readFileSync(`${pluginRoot}/config/config/config.yaml`, 'utf-8'))
            for (const key in config_default_yaml) {
                if (!(key in config_yaml)) {
                    config_yaml[key] = config_default_yaml[key]
                }
            }
            for (const key in config_yaml) {
                if (!(key in config_default_yaml)) {
                    delete config_yaml[key]
                }
            }
            fs.writeFileSync(`${pluginRoot}/config/config/config.yaml`, YAML.stringify(config_yaml))
            initialConfig = config_yaml
        } catch (err) {
            logger.error('config.yaml 初始化读取失败', err)
            return false
        }
        this.#config = this.#createDeepProxy(initialConfig)
    }
    // 为#config创建深度数据代理
    #createDeepProxy(obj) {
        const handler = {
            set: (target, property, value) => {
                target[property] = value
                this.#saveConfig(this.#config)
                return true
            }
        }
        for (const key in obj) {
            if (typeof obj[key] === 'object' && obj[key] !== null) {
                obj[key] = this.#createDeepProxy(obj[key])
            }
        }

        return new Proxy(obj, handler)
    }
    // 保存配置文件
    #saveConfig(configData) {
        try {
            fs.writeFileSync(
                `${pluginRoot}/config/config/config.yaml`,
                YAML.stringify(configData)
            );
        } catch (err) {
            logger.warn('写入 config.yaml 失败', err);
        }
    }
    getConfig() {
        if (Object.keys(this.#config).length === 0) {
            this.#initConfig()
        } else {
        }
        return this.#config
    }
}

export default new Config()
